package org.soarsky.wealthchengdu.network;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONObject;
import org.soarsky.wealthchengdu.entity.MapData;
import org.soarsky.wealthchengdu.entity.MapSearchData;
import org.soarsky.wealthchengdu.tools.ParserJsonFactory;
import org.soarsky.wealthchengdu.tools.ParserJsonFactory.ResponseCode;



/**
 *解析地图数据
 *
 */
public class ParserMapResults {
	//types属性值
	//美食
	public static final String FOOD="food";
	//住宿
	public static final String LODGING="lodging";
	//公交站
	public static final String BUS_STATION="bus_station";
	//地铁
	public static final String SUBWAY_STATION="subway_station";
	//火车站
	public static final String TRAIN_STATION="train_station";
	//语言
	public static final String LANGUAGE_CN="zh-CN";
	public static final String LANGUAGE_EN="en";
	final String key="AIzaSyA7bcK50vVWbvxdybvrjy-9NmjLmS6aEkE";
	final String serch_url="https://maps.googleapis.com/maps/api/place/search/json";
	final String mapUrl="https://maps.googleapis.com/maps/api/place/details/json";
	/**
	 * 必须传
	 * key，即您应用的 API 密钥。此密钥用于标识您的应用，以便管理配额，从而让您的应用可立即使用其中添加的地方信息。要创建 API 项目并获取密钥，请访问 API 控制台。
	 * location，即要在其周围检索地方信息的纬度/经度。必须指定为纬度、经度。
     * radius，用于定义要在其范围内返回的地方结果的距离（以米为单位）。最大允许半径为 50,000 米。请注意，如果指定了 rankby=distance，则不得包含 radius（参见下文可选参数中的说明）。
     * sensor，用于表示发起相关地方请求的设备是否会使用 GPS 等位置传感器来确定该请求中发送的位置。该值必须是 true 或 false。
	 * 
	 * 可选参数
	 * language=zh-CN , en
	 * name，即要与地方信息的名称进行匹配的字词。这会将结果限制为包含传递的 name 值。
	 * types=搜索餐饮 和 住宿  food 餐馆  lodging住宿
	 * 调用例子：
	 *  MapSearchData mapData = mapResults.getSearchResult("-33.8670522,151.1957362", 500, false, ParserMapResults.FOOD, null, ParserMapResults.LANGUAGE_EN, null);
	 * */
	public MapSearchData getSearchResult(String location,int radius,boolean sensor,String types,String name,String language,String pagetoken) throws Exception{
		List<NameValuePair> list = new ArrayList<NameValuePair>();
		list.add(new BasicNameValuePair("key", key));
		list.add(new BasicNameValuePair("location", location));
		list.add(new BasicNameValuePair("radius", radius+""));
		list.add(new BasicNameValuePair("sensor", sensor+""));
		if(types!=null)
			list.add(new BasicNameValuePair("types", types));
		if(name!=null)
			list.add(new BasicNameValuePair("name", name));
		if(language!=null)
			list.add(new BasicNameValuePair("language", language));
		if(pagetoken!=null)
			list.add(new BasicNameValuePair("pagetoken", pagetoken));
		ResponseCode<String> msg = ParserJsonFactory.parserJsonHeadGet(
				serch_url, list);
		if(!msg.haveData())
			return null;
		MapSearchData mapSearchData=null;
		JSONObject jsonObject = new JSONObject(msg.getResData());
		String status=jsonObject.getString("status");
		if("OK".equalsIgnoreCase(status)){
			mapSearchData = new MapSearchData();
			ParserJsonFactory.parseAnnotationJsonData(jsonObject, mapSearchData, false);
		}
		return mapSearchData;
	}
	/**
	 * 搜索周边所以服务
	 * */
	public MapSearchData getSearchResult(String location,int radius,boolean sensor) throws Exception{
		return getSearchResult(location, radius, sensor, null, null, null, null);
	}
	public MapSearchData getSearchResult(String location,int radius,boolean sensor,String type,String language) throws Exception{
		return getSearchResult(location, radius, sensor, type, null, language, null);
	}
	//获取地理位置
	public MapData getMapData(String reference,String sensor) throws Exception{
		String _key=key;
		List<NameValuePair> list = new ArrayList<NameValuePair>();
		list.add(new BasicNameValuePair("reference", reference));
		list.add(new BasicNameValuePair("sensor", sensor));
		list.add(new BasicNameValuePair("key", _key));
		ResponseCode<String> msg = ParserJsonFactory.parserJsonHeadGet(
				mapUrl, list);
		if(!msg.haveData())
			return null;
		MapData mapData =null;
		JSONObject jsonObject = new JSONObject(msg.getResData());
		String status=jsonObject.getString("status");
		if("OK".equalsIgnoreCase(status)){
			mapData = new MapData();
			jsonObject = jsonObject.getJSONObject("result");
			ParserJsonFactory.parseAnnotationJsonData(jsonObject, mapData, true);
		}
		return mapData;
	}
}
